<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
<script>
  function Person(name, age,sex,weight,height) {
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.weight = weight;
    this.height = height;

    return 1
  }
  Person.prototype.do = function () {
    console.log("学习 react")
  }



  //手写new的函数
  function myNew(constr, ...ccc) {
    //1.创建一个对象
    const obj = {};

    //2.调用构造函数把构造函数的this指向我们创建的对象
    const re = constr.apply(obj, ccc)

    //3.把obj的隐式原型指向构造函数的原型对象
    obj.__proto__ = constr.prototype;

    //4.返回值(判断构造函数的返回值是基本类型还是引用类型)
    if (typeof re === 'object' && re !== null || typeof re === "function") {
      return re;
    } else {
      return obj
    }
  }
  // //手写new的函数
  // function myNew(constr, name , age,sex,weight,height) {
  //   //1.创建一个对象
  //   const obj = {};
  //
  //   //2.调用构造函数把构造函数的this指向我们创建的对象
  //   const re = constr.call(obj, name , age,sex,weight,height)
  //
  //   //3.把obj的隐式原型指向构造函数的原型对象
  //   obj.__proto__ = constr.prototype;
  //
  //   //4.返回值(判断构造函数的返回值是基本类型还是引用类型)
  //   if (typeof re === 'object' && re !== null || typeof re === "function") {
  //     return re;
  //   } else {
  //     return obj
  //   }
  // }

  const p1 = myNew(Person, "laowang", 18 , '男' ,'60kg','180')
  console.log(p1, "p1");
</script>
</body>

</html>